#ifndef _HH_RESOLVER_HH_
#define _HH_RESOLVER_HH_

#include <fstream>
#include <iostream>
#include "Matriz.h"

class Resolver
{
	public:
		Resolver();
		Resolver(std::ifstream &datos);

		int factorizacion_QR(Matriz &A, Matriz &Q, Matriz &R);
		int obtener_autovalores(Matriz &A);
		
		void reordenar_lavarropas();
		int evitar_catastrofe();
		Matriz convertirEntrada();

		void setDatos(std::ifstream &datos);
		
		void imprimirEntrada(std::ostream &os);
		
		friend std::ostream& operator<<(std::ostream &os, Resolver &res);

	private:
		std::vector<double> _tensiones;
		std::vector<unsigned int> _lavarropas;
		unsigned int _pisos, _peso_lavarropas, _masa_inicial_pisos, _cant_movimientos;
		
		Matriz _A;
		Matriz _K;
		std::vector<double> _autovalores;
		
		void heuristica_azar_1();
		void heuristica_azar_2();

		void establecer_datos(std::ifstream &datos);

		Matriz matriz_de_pesos();
};

#endif//_HH_RESOLVER_HH_
